package com.mtao.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.mtao.entity.SysUser;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.List;

@Setter
@Getter
@AllArgsConstructor
public class JwtUserDto implements UserDetails {
    @Resource
    private SysUser sysUser;

    private Integer id; // 用户ID字段


    /**
     * 重写方法，判断用户是否可用
     * @return 如果用户可用，则返回true；否则返回false
     */
    @Resource
    private final List<GrantedAuthority> authorities;

    /**
     * 重写方法，获取用户权限
     * @return 用户权限
     */
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }

    /**
     * 重写方法，获取用户密码
     * @return 用户密码
     */
    @Override
    @JsonIgnore
    public String getPassword() {
        return sysUser.getPassword();
    }

    /**
     * 重写方法，获取用户名称
     * @return 用户名称
     */
    @Override
    public String getUsername() {
        return sysUser.getUsername();
    }
    /**
     * 重写方法，判断用户是否过期
     * @return 如果用户未过期，则返回true；否则返回false
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 重写方法，判断用户是否被锁定
     * @return 如果用户未被锁定，则返回true；否则返回false
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 重写方法，判断用户凭证是否过期
     * @return 如果用户凭证未过期，则返回true；否则返回false
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }


    /**
     * 判断用户是否启用
     *
     * @return 用户是否启用
     */
    @Override
    public boolean isEnabled() {
        return sysUser.getEnabled();
    }



}
